//: [Previous](@previous)

import Foundation

/*
给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ，并返回其长度。如果不存在符合条件的子数组，返回 0 。

 

示例 1：

输入：target = 7, nums = [2,3,1,2,4,3]
输出：2
解释：子数组 [4,3] 是该条件下的长度最小的子数组。
示例 2：

输入：target = 4, nums = [1,4,4]
输出：1
示例 3：

输入：target = 11, nums = [1,1,1,1,1,1,1,1]
输出：0

*/

func minSubArrayLen(_ target: Int, _ nums: [Int]) -> Int {
    var left = 0
    var result = Int.max
    var sum = 0
    for i in 0..<nums.count {
        let num = nums[i]
        sum += num
        while(sum >= target) {
            result = min(result, i - left + 1)
            sum -= nums[left]
            left+=1
        }
    }
    return result == Int.max ? 0 : result
}

var nums = [2,3,1,2,4,3]
var target = 7

//nums = [1, 4, 4]
//target = 4
//
//nums = [1,1,1,1,1,1,1,1]
//target = 11

//nums = [1,2,3,4,5]
//target = 11

target = 15
nums = [5,1,3,5,10,7,4,9,2,8]

let result = minSubArrayLen(target, nums)
print(result)
//print(1)
